<template>
  <div ref="chart" style="width:100%;height:190px;margin-left: 20px;margin-top: 10px;"></div>
</template>

<script>
import * as echarts from 'echarts';
import axios from 'axios';

export default {
  data() {
    return {
      chart: null,
      chartData: []
    };
  },
  mounted() {
    this.initChart();
    this.getData();
  },
  methods: {
    async getData() {
      try {
        const res = await axios.get('http://localhost:8080/data/user/sex');
        this.chartData = res.data.data; // 假设返回的数据格式符合预期
        this.updateChart();
      } catch (err) {
        console.log('Failed to fetch data:', err);
      }
    },
    initChart() {
      // 初始化ECharts实例
      this.chart = echarts.init(this.$refs.chart);
      // 设置初始配置
      const option = this.getChartOption();
      this.chart.setOption(option);
    },
    updateChart() {
      // 更新图表数据
      const option = this.getChartOption();
      this.chart.setOption(option);
    },
    getChartOption() {
      return {
        tooltip: {
          trigger: 'item'
        },
        legend: {
          top: '5%',
          left: 'center',
          textStyle: { // 设置图例文字样式
            color: '#fff' // 设置图例文字颜色为白色
          }
        },
        series: [
          {
            name: 'User Sex',
            type: 'pie',
            radius: ['50%', '65%'],
            avoidLabelOverlap: false,
            itemStyle: {
              borderRadius: 10,
              borderColor: '#fff',
              borderWidth: 2
            },
            label: {
              show: false,
              position: 'center', // 标签位置设置为内部
              // position: 'outside', // 标签位置设置为外部
              formatter: '{b}\n{d}%', // 标签显示内容格式
              color: '#fff',// 设置标签文字颜色为白色
            },
            emphasis: {
              label: {
                show: true,
                fontSize: 30,
                fontWeight: 'bold',
              }
            },
            labelLine: {
              show: false
            },
            data: this.chartData // 使用获取的数据
          }
        ]
      };
    }
  }
};
</script>

<style>
</style>
